package br.com.portalnet.persistence;

import java.util.List;

import org.apache.tomcat.jni.Local;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import br.com.portalnet.model.Equipamento;
import br.com.portalnet.model.Localidade;
import br.com.portalnet.model.Nivel;
import br.com.portalnet.model.Usuario;
import br.com.portalnet.util.HibernateUtil;

public class LocalidadeDAO implements ILocalidadeDAO {

	@Override
	public void save(Localidade localidade) 
	{		
		Session session = null;	
		
		try
		{		
			session = HibernateUtil.getSession().openSession();
			Transaction t = session.beginTransaction();
			session.save(localidade);
			t.commit();			
		
		}
		catch(Exception erro)
		{
			try
			{			
				if(session != null)
				{
					if(session.getTransaction().isActive())
						session.getTransaction().rollback();					
				}			
			}
			catch (Exception e) 
			{
				
			}
			
		}		
		finally 
		{
			session.close();		
		}	
	}

	@Override
	public Localidade getLocalidade(long id) 
	{
		Session session = null;
		
		try 
		{
			 session = HibernateUtil.getSession().openSession();
			 return (Localidade) session.get(Localidade.class, id);
		} 
		finally 
		{			
			try
			{
				if(session != null)
				{
					session.close();
				}
				
			} 
			catch (Exception e) 
			{
				
			}
			
		}	
	}

	@Override
	public List<Localidade> list() 
	{
		Session session = null;
		
		try
		{
			session = HibernateUtil.getSession().openSession();
			Transaction t = session.beginTransaction();
			//List lista = session.createQuery("from Livro").list();		
			List lista = session.createCriteria(Localidade.class).list();
			t.commit();
			return lista;
			
		}
		catch(Exception erro)
		{
			
			try
			{			
				if(session != null)
				{
					if(session.getTransaction().isActive())
						session.getTransaction().rollback();
				}
			
				
			}
			catch (Exception e) 
			{
				
			}
			
			return null;			
		}
		
		finally 
		{
			session.close();		
		}	
	}

	@Override
	public void remove(Localidade localidade) 
	{		
		Session session = null;
		
		try
		{	
			session = HibernateUtil.getSession().openSession();
			Transaction t = session.beginTransaction();
			session.delete(localidade);
			t.commit();
		
		}
		catch(Exception erro)
		{			
			try
			{				
				if(session != null)
				{
					if(session.getTransaction().isActive())
						session.getTransaction().rollback();		
				}
			
				
			} 
			catch (Exception e) 
			{
				
			}
			
		}		
		finally 
		{
			session.close();
		}
	}

	@Override
	public void update(Localidade localidade) 
	{
		Session session = null;
		
		try
		{
			session = HibernateUtil.getSession().openSession();
			Transaction t = session.beginTransaction();
			session.update(localidade);
			t.commit();
				
		}
		catch(Exception erro)
		{			
			try
			{
				
				
				if(session != null)
				{
					if(session.getTransaction().isActive())
						session.getTransaction().rollback();					
				}		
				
			}
			catch (Exception e) 
			{		
				
			}			
		}		
		finally 
		{
			session.close();	
		}
	}

	@Override
	public Localidade findLocalidadeByCidade(String cidade) 
	{
		Session session = null;
		try
		{		
			session = HibernateUtil.getSession().openSession();
			Transaction t = session.beginTransaction();		
			Criteria criteria = session.createCriteria(Localidade.class);
			criteria.add(Restrictions.eq("cidade", cidade));
			Localidade local = (Localidade) criteria.list().get(0);
			t.commit();
			return local;
		}catch(Exception erro){
			
			try
			{
				
				
				if(session != null)
				{
					if(session.getTransaction().isActive())
						session.getTransaction().rollback();					
					
				}
			
				
			} catch (Exception e) {
				
			}
			return null;
			
		}
		
		finally 
		{
			session.close();
			
		
		}
	
		
	}
	
}
